package com.cskaoyan.javase.oop1._12anonymous;
/**
 * 匿名（anonymous）或者佚名，指的是没有名字或者名字缺失。
 *      在Java当中，匿名对象指的就是没有名字的对象。
 * 或者，说的更清楚一点，就是：在创建对象时，就没有引用指向的对象，就是匿名对象！
 * 匿名对象的语法很简单，只需要在方法等位置中写下列语法：
 * new 类名();
 * 以上语法就得到了一个匿名对象，从实质上看：
 * 该对象没有栈上的引用指向，没有所谓的"对象名"，是一个匿名对象。
 *
 * 匿名对象的作用/使用场景：
 *      匿名对象最大的优点就是语法更简单，不需要引用接收，写起来更快。
 *      所以匿名对象经常在以下场景使用：
 *          1.仅创建一个对象，用于调用一次成员方法或者访问一次成员变量
 *              而且匿名对象没有引用指向，它也必须在创建时使用它
 *              语法：
 *              new 类名()点使用;
 *              当然你想用匿名对象多次访问成员，也做不到。
 *          2.匿名对象更常见的，是在方法中使用。
 *              比如作为方法的实参和方法返回值。
 *
 * 优缺点:
 * 优点：
 *      1.使用匿名对象，代码简洁（相当于少写了一些代码）这是匿名对象最主要的优点。
 *      2.匿名对象在使用完毕后会立刻成为"垃圾"等待GC回收，从理论角度上来说，可以提升内存利用率。
 *          但是GC不具有即时性，并不是一个对象更早成为"垃圾"就会更好回收，这个优点仅是理论上的。
 *
 * 缺点：
 * 匿名对象由于没有引用指向，所以它是一次性的，用完后就无法再次使用了。
 *
 * 总结:
 *      如果某处仅使用某个对象一次或者两次(很少的次数),那么可以使用匿名对象
 *      否者,如果有多次使用对象的需求,就不要用匿名对象.
 *
 * @since 11:37
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // 创建一个正常的对象
        Student s = new Student();
        // 创建一个匿名对象
        new Student();

        // 创建匿名对象并使用
        new Student().test();

        // 常规的调用方法
        method(s);

        // 匿名对象的做法
        method(new Student());

    }

    public static void method(Student s){
        s.test();
    }

    // 这里需要返回一个Student对象
    public static Student method(){
        // Student s = new Student();
        // return s;
        return new Student();
    }
}
class Student{
    public void test(){
        System.out.println("我是一个测试方法！");
    }
}